package bombita.modelo.Armas;

import org.jdom2.DataConversionException;
import org.jdom2.Element;

import bombita.modelo.Direccion;
import bombita.modelo.Interfaces.Sincronico;
import bombita.modelo.Municiones.Municion;

public abstract class Arma implements Sincronico
{
	protected float tiempoDescanso;
	protected float bonusRetardo;
	
	public Arma ()
	{
		tiempoDescanso = 0;
		bonusRetardo = 0;
	}
	
	@Override
	public void recibirPulsoReloj(float tiempo)
	{
		if (tiempoDescanso > 0) {
			tiempoDescanso -= tiempo;
		}
	}

	public void agregarBonusDeRetardo(){
		this.bonusRetardo = this.bonusRetardo + 0.15f;
	}

	protected abstract Municion prepararMunicion(Direccion dir);

	public boolean puedeDisparar ()
	{
		return (tiempoDescanso <= 0);
	}

	public Municion disparar(Direccion dir) throws NoSePuedeDispararException
	{
		if (!this.puedeDisparar()) {
			throw new NoSePuedeDispararException();
		}
		
		Municion disparada = this.prepararMunicion(dir);
		this.tiempoDescanso = disparada.delay();
		return disparada;
	}

	public Element serializar()
	{
		Element nodo = new Element(this.getClass().getCanonicalName().substring("bombita.modelo.".length()));
		nodo.setAttribute("espera", Float.toString(tiempoDescanso));
		return nodo;
	}
	
	public void aplicarSerializado(Element nodo) throws DataConversionException
	{
		tiempoDescanso = nodo.getAttribute("espera").getFloatValue();
	}
}
